<!--
 * @LastEditors: 七七
 * @Date: 2023-01-10 22:03:52
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>this</title>
</head>

<body>
  <script>
    /*
   * 解析器在调用函数每次都会向函数内部传递进一个隐含的参数,
   * 	这个隐含的参数就是this，this指向的是一个对象，
   * 	这个对象我们称为函数执行的 上下文对象，
   * 	根据函数的调用方式的不同，this会指向不同的对象
   * 		1.以函数的形式调用时，this永远都是window
   * 		2.以方法的形式调用时，this就是调用方法的那个对象
   */

    function fun(a, b) {
      // console.log("a = " + a + ", b = " + b);
      console.log(this); //window
      console.log(this.name);
    }
    fun(1, 2);

    //创建一个对象
    var obj = {
      name: "孙悟空",
      sayName: fun
    };

    var obj2 = {
      name: "沙和尚",
      sayName: fun
    };

    //console.log(obj.sayName == fun); //true
    var name = "全局的name属性";
    //obj.sayName();
    //以函数形式调用，this是window
    //fun();

    //以方法的形式调用，this是调用方法的对象
    //obj.sayName();
    obj2.sayName();




    //创建一个name变量
    var name = "全局";

    //创建一个fun()函数
    function fun() {
      console.log(this.name);
    }

    //创建两个对象
    var obj = {
      name: "孙悟空",
      sayName: fun
    };

    var obj2 = {
      name: "沙和尚",
      sayName: fun
    };

    //我们希望调用obj.sayName()时可以输出obj的名字
    //obj.sayName();

    obj.sayName();

  </script>
</body>

</html>